﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

using hou_elearning.Entity;
using hou_elearning.Business;
using hou_elearning.Custom;
using System.Data;

public partial class Admin_control_ucQuanlycauhoi : System.Web.UI.UserControl
{
    private List<CauhoiEntity> glbLstGrvDatasource = null;    
    protected void Page_Load(object sender, EventArgs e)
    {
        napGrvCauhoi(true);
        txtNoidung.Language = "vi";
        CKFinder.FileBrowser _FileBrowser = new CKFinder.FileBrowser();
        _FileBrowser.BasePath = "/hou-elearning/ckfinder/";
        _FileBrowser.SetupCKEditor(txtNoidung);
        if (!IsPostBack)
        {            
            napDDL();
            
        }
    }
    /*Hàm nạp drop down list
     * */

    public Int32 iGetUserLogin()
    {
        Int32 PK_iNguoidungID = 0;
        try
        {
            if (Session["UserID"] != null)
            {
                PK_iNguoidungID = Int32.Parse(Session["UserID"].ToString());
            }
        }
        catch (Exception ex)
        {
            PK_iNguoidungID = 0;
        }
        return PK_iNguoidungID;
    }
    private void napDDL()
    {
        // nạp danh mục câu hỏi
        List<DanhmuccauhoiEntity> listDanhmuccauhoi = DanhmuccauhoiBRL.GetAll();
        for (int i = 0; i < listDanhmuccauhoi.Count; i++)
        {
            ListItem danhmuci = new ListItem(listDanhmuccauhoi[i].sTendanhmuccauhoi.ToString(),listDanhmuccauhoi[i].PK_iDanhmuccauhoiID.ToString());
            ddlDanhmuccauhoi.Items.Add(danhmuci);
        }
        // nạp ddl số điểm
        ListItem de = new ListItem("Dễ", 1+"");
        ddlSodiem.Items.Add(de);
        ListItem trungbinh = new ListItem("Trung bình", 2 + "");
        ddlSodiem.Items.Add(trungbinh);
        ListItem kho = new ListItem("Khó", 3 + "");
        ddlSodiem.Items.Add(kho);
        

    }
    /*
     *Hàm nạp gridview câu hỏi
     *Tham số: bLoadFromDB: cho biết có load lại từ CSDL không
     */
    public void napGrvCauhoi(bool bLoadFromDB)
    {
        if (bLoadFromDB == true || Cache["cacheLstGrvDatasource"] == null)
        {
            glbLstGrvDatasource = CauhoiBRL.GetAll();
            Cache["cacheLstGrvDatasource"] = glbLstGrvDatasource;
        }
        glbLstGrvDatasource = (List<CauhoiEntity>)Cache["cacheLstGrvDatasource"];
        if (glbLstGrvDatasource.Count <= 0)
        {
            divThongbao.InnerHtml = "<p class='info' id='warning'><span class='info_inner'>Không có bản ghi nào để hiển thị!</span></p>";
        }
        else
        {
            grvCauhoi.DataSource = glbLstGrvDatasource;
            grvCauhoi.DataKeyNames = new string[] { "PK_iCauhoiID" };
            grvCauhoi.DataBind();
        }
    }

    /*
     * Hàm reset để xóa trắng form nhâp thông tin
     */
    public void resetForm()
    {
        txtID.Text = "";
        txtNoidung.Text = "";
        lblNgaytao.Text = "";
        lblNgaycapnhat.Text = "";
        lblNguoicapnhat.Text = "";
        lblNguoitao.Text = "";
        if (ddlSodiem.Items.Count > 0)
            ddlSodiem.SelectedIndex = 0;
        if(ddlDanhmuccauhoi.Items.Count>0)
        ddlDanhmuccauhoi.SelectedIndex = 0;        
        divThongbao.InnerHtml = "";
    }
    /*
     * Hàm nạp dữ liệu cho form theo ID truyền vào
     * Tham số: truyền vào ID
     * Thực hiện: Lấy thông tin đối tượng theo ID và nạp vào form
     */
    public void napForm(short iPK_ID)
    {
        CauhoiEntity oCauhoi = CauhoiBRL.GetOne(iPK_ID);
        if (oCauhoi != null)
        {
            txtID.Text = oCauhoi.PK_iCauhoiID.ToString();
            txtNoidung.Text = oCauhoi.sNoidung.ToString();
       //     txtSodiem.Text = oCauhoi.iDiem.ToString();
            lblNgaytao.Text = oCauhoi.dNgaytao.ToShortDateString();
            lblNgaycapnhat.Text = oCauhoi.dNgaycapnhat.ToShortDateString();
            lblNguoitao.Text = NguoidungBRL.GetOne(Int32.Parse(oCauhoi.FK_iNguoitaoID.ToString())).sTendangnhap.ToString();
            lblNguoicapnhat.Text = NguoidungBRL.GetOne(Int32.Parse(oCauhoi.FK_iNguoicapnhatID.ToString())).sTendangnhap.ToString();
            ddlDanhmuccauhoi.SelectedIndex = 0;    
            divThongbao.InnerHtml = "";
            
        }
    }
    protected void grvCauhoi_PageIndexChanging(object sender, GridViewPageEventArgs e)
    {
        grvCauhoi.PageIndex = e.NewPageIndex;
        napGrvCauhoi(false);
    }
    protected void grvCauhoi_RowCommand(object sender, GridViewCommandEventArgs e)
    {
        int iIndex;
        short iPK_ID;
        iIndex = Convert.ToInt32(e.CommandArgument);
        GridViewRow row = grvCauhoi.Rows[iIndex];
        iPK_ID = short.Parse(row.Cells[1].Text);
        if (e.CommandName == "Sua")
        {
            btnOK.CommandName = "Edit";
            btnOK.Text = "<span>Sửa<span>";
            btnOK.CommandArgument = iPK_ID.ToString();
            btnOK.CausesValidation = false;
            panEdit.Visible = true;

            lblNgaycapnhat1.Visible = true;
            lblNguoicapnhat1.Visible = true;
            lblNguoitao1.Visible = true;
            lblNgaytao1.Visible = true;
            lblNgaytao.Visible = true;
            napForm(iPK_ID);
        }
        else
            if (e.CommandName == "Xoa")
            {
                /*
                 * Thực hiện tác vụ xóa
                 * Phải đảm bảo xóa được trong Database và xóa trong danh sách.
                 * Nhưng không phải load lại từ database để hiển thị
                 */
                CauhoiBRL.Remove(iPK_ID); //Xóa trong database
                //Tìm đối tượng nhóm người dùng theo ID trong danh sách lấy từ cache
                glbLstGrvDatasource = (List<CauhoiEntity>)Cache["cacheLstGrvDatasource"];
                CauhoiEntity oCauhoiDelete = glbLstGrvDatasource.Find
                (
                    delegate(CauhoiEntity oCauhoiByID)
                    {
                        return oCauhoiByID.PK_iCauhoiID == iPK_ID;
                    }
                );
                if (oCauhoiDelete != null)
                {
                    glbLstGrvDatasource.Remove(oCauhoiDelete); //Xóa trong danh sách
                }
                napGrvCauhoi(false);
                divThongbao.InnerHtml = "<p class='info' id='success'><span class='info_inner'>Xóa câu hỏi " + oCauhoiDelete.PK_iCauhoiID + " thành công!</span></p>";
            }
    }
    protected void grvCauhoi_Sorting(object sender, GridViewSortEventArgs e)
    {
        if (ViewState["SortDirection"] == null)
            ViewState["SortDirection"] = "ASC";
        else
        {
            ViewState["SortDirection"] = ViewState["SortDirection"].ToString() == "ASC" ? "DESC" : "ASC";
        }
        //List<CauhoiEntity> lstQuyen = CauhoiBRL.GetAll();
        List<CauhoiEntity> lstQuyen = (List<CauhoiEntity>)Cache["cacheLstGrvDatasource"];
        glbLstGrvDatasource = CauhoiEntity.Sort(lstQuyen, e.SortExpression, ViewState["SortDirection"].ToString());
        napGrvCauhoi(false);
    }
    protected void grvCauhoi_RowDataBound(object sender, GridViewRowEventArgs e)
    {
        if (e.Row.RowType == DataControlRowType.DataRow)
        {
            //nếu nội dung câu hỏi lớn hơn 100 kí tự 
            Label danhmuc = (Label)e.Row.FindControl("lblNoidungbound");
            String noidung1 = danhmuc.Text;
            if (noidung1.Length > 100)
                e.Row.Cells[2].Text = noidung1.Substring(0, 100) + " ...";

            //- tên danh mục
            danhmuc = (Label)e.Row.FindControl("lblDanhmuccauhoi");
          //  short madanhmuc = short.Parse(danhmuc.Text);
          //  String tendanhmuc = DanhmuccauhoiBRL.GetOne(madanhmuc).sTendanhmuccauhoi.ToString() ;
            e.Row.Cells[4].Text = DanhmuccauhoiBRL.GetOne(Int16.Parse(danhmuc.Text)).sTendanhmuccauhoi.ToString();

            danhmuc = (Label)e.Row.FindControl("lblNguoitao1");
            e.Row.Cells[5].Text = NguoidungBRL.GetOne(Int16.Parse(danhmuc.Text)).sTendangnhap.ToString();
            //- cấp độ
            danhmuc = (Label)e.Row.FindControl("lblCapdo");
            if (short.Parse(danhmuc.Text) == 1)
            {
                e.Row.Cells[3].Text = "Dễ";
            }else
                if (short.Parse(danhmuc.Text) == 2)
                {
                    e.Row.Cells[3].Text = "Trung bình";
                }
                else
                    if (short.Parse(danhmuc.Text) == 3)
                    {
                        e.Row.Cells[3].Text = "Khó";
                    }

        }

    }
    protected void btnSearchByID_Click(object sender, EventArgs e)
    {
        string strSearch = txtSearchByID.Text;
        short iPK_ID = 0;
        List<CauhoiEntity> lstSearchResult = null;
        glbLstGrvDatasource = (List<CauhoiEntity>)Cache["cacheLstGrvDatasource"];
        if (txtID.Text.Trim().Equals(""))
        {
            iPK_ID = 0;
        }
        else
        {
            iPK_ID = Int16.Parse(txtID.Text);
        }
        /* Nếu người dùng không nhập ID thì tìm theo từ khóa */
        if (iPK_ID == 0)
        {
            lstSearchResult = glbLstGrvDatasource.FindAll(
            delegate(CauhoiEntity oCauhoi)
            {
                return oCauhoi.sNoidung.ToUpper().Contains
                (
                    strSearch.ToUpper() 
                );
            });
        }
        /* Tìm theo ID */
        else
        {
            lstSearchResult = glbLstGrvDatasource.FindAll
            (
                delegate(CauhoiEntity oCauhoiByID)
                {
                    return oCauhoiByID.PK_iCauhoiID == iPK_ID;
                }
            );
        }
        /* Hiển thị thông báo */
        if (lstSearchResult.Count == 0)
        {
            napGrvCauhoi(false);
            divThongbao.InnerHtml = "<p class='info' id='info'><span class='info_inner'>Không tìm thấy bản ghi nào phù hợp</span></p>";
        }
        else
        {
            grvCauhoi.DataSource = lstSearchResult;
            grvCauhoi.DataBind();
            divThongbao.InnerHtml = "<p class='info' id='info'><span class='info_inner'>Tìm thấy " + lstSearchResult.Count + " bản ghi phù hợp!</span></p>";
        }
    }
    protected void btnShowAll_Click(object sender, EventArgs e)
    {
        napGrvCauhoi(false);
        divThongbao.InnerHtml = "";
    }
    protected void btnOK_Click(object sender, EventArgs e)
    {
        /*
         * Khi người dùng nhấn nút OK (Thêm, sửa) sẽ thực hiện tác vụ thêm hoặc sửa
         */
        try
        {
           
            /* Khởi tạo đối tượng mới và gán giá trị cho đối tượng này từ các trường trong form nhập */
            CauhoiEntity oCauhoi = new CauhoiEntity();
            oCauhoi.sNoidung = txtNoidung.Text.Trim();
            oCauhoi.iDiem = short.Parse(ddlSodiem.SelectedValue);
            oCauhoi.dNgaycapnhat = DateTime.Now;
            oCauhoi.FK_iDanhmuccauhoiID = short.Parse(ddlDanhmuccauhoi.SelectedValue);            
            oCauhoi.FK_iNguoicapnhatID = iGetUserLogin();
            /* Kiểm tra tác vụ đang là thêm hay sửa */
            if (btnOK.CommandName == "Edit")
            {
                /*Đối tượng câu hỏi cũ. lấy giá trị các trường không phải sửa
                */
                //oCauhoi.dNgaytao = DateTime.Parse(lblNgaytao.Text.Trim());// ngày tạo cũ
                short iPK_ID = short.Parse(btnOK.CommandArgument);
                CauhoiEntity oldCauhoi = CauhoiBRL.GetOne(iPK_ID);                
                oCauhoi.dNgaytao = oldCauhoi.dNgaytao;
                oCauhoi.FK_iNguoitaoID =oldCauhoi.FK_iNguoitaoID;
                oldCauhoi.FK_iNguoicapnhatID = iGetUserLogin();
                oCauhoi.PK_iCauhoiID = iPK_ID;
                CauhoiBRL.Edit(oCauhoi); //Gọi tác vụ sửa
                btnOK.CausesValidation = true;
                /*  Hiển thị thông báo */
                divThongbao.InnerHtml = "<p class='info' id='success'><span class='info_inner'>Sửa câu hỏi " + oCauhoi.PK_iCauhoiID + " thành công!</span></p>";
                /* Nạp lại dữ liệu */
                panEdit.Visible = false;
                napGrvCauhoi(true);
            }
            else
            {
                
                    /* Thêm mới */
                //oCauhoi.dNgaycapnhat = DateTime.Now;
                oCauhoi.dNgaytao = DateTime.Now;
                oCauhoi.FK_iNguoitaoID = iGetUserLogin();
                    int iPK_ID = CauhoiBRL.Add(oCauhoi);
                    if (iPK_ID > 0)
                    {
                        divThongbao.InnerHtml = "<p class='info' id='success'><span class='info_inner'>Thêm câu hỏi thành công!</span></p>";
                        /* Nạp lại dữ liệu */
                        panEdit.Visible = false;
                        napGrvCauhoi(true);
                    }
                
            }
        }
        catch (Exception ex)
        {
            divThongbao.InnerHtml = "<p class='info' id='error'><span class='info_inner'>Lỗi sửa hoặc thêm mới: " + ex.Message + "</span></p>";
        }
    }
    protected void btnCancel_Click(object sender, EventArgs e)
    {
        resetForm();
        btnOK.CommandName = "Add";
        panEdit.Visible = false;
    }
    protected void lbtnAdd_Click(object sender, EventArgs e)
    {
        btnOK.CommandName = "Add";
        btnOK.Text = "<span>Thêm</span>";
        panEdit.Visible = true;
        resetForm();
        lblNgaycapnhat1.Visible = false;
        lblNguoicapnhat1.Visible = false;
        lblNguoitao1.Visible = false;
        lblNgaytao1.Visible = false;
        lblNgaytao.Visible = false;
        
    }
    protected void lbtnDelete_Click(object sender, EventArgs e)
    {
        try
        {
            glbLstGrvDatasource = (List<CauhoiEntity>)Cache["cacheLstGrvDatasource"];
            CauhoiEntity oCauhoiDelete = null;
            int iDeleteCount = 0; //Đếm số lượng bản ghi xóa thành công
            /* Lặp với mỗi hàng, tìm hàng đã chọn, tìm ra ID và xóa theo ID */
            foreach (GridViewRow row in grvCauhoi.Rows)
            {
                CheckBox chkDelete = row.FindControl("chkDelete") as CheckBox;
                Int16 iID = Convert.ToInt16(grvCauhoi.DataKeys[row.RowIndex].Values["PK_iCauhoiID"]);
                if ((chkDelete != null) && (chkDelete.Checked == true))
                {
                    CauhoiBRL.Remove(iID); //Xóa trong database
                    /* Tìm đối tượng nhóm người dùng theo ID trong danh sách */
                    oCauhoiDelete = glbLstGrvDatasource.Find
                    (
                        delegate(CauhoiEntity oCauhoiByID)
                        {
                            return oCauhoiByID.PK_iCauhoiID == iID;
                        }
                    );
                    glbLstGrvDatasource.Remove(oCauhoiDelete); //xóa trong list cache
                    ++iDeleteCount;
                }
            }
            napGrvCauhoi(false);
            if (iDeleteCount > 0)
            {
                divThongbao.InnerHtml = "<p class='info' id='success'><span class='info_inner'>Xóa thành công " + iDeleteCount + " bản ghi!</span></p>";
            }
        }
        catch (Exception ex)
        {
            divThongbao.InnerHtml = "<p class='info' id='error'><span class='info_inner'>Lỗi: " + ex.Message + "</span></p>";
        }
    }
}